package com.ssy.jt808.gateway.sdk.terminal.pojo.info.alarm;

import com.ssy.jt808.gateway.sdk.terminal.constant.location.addition.AdasAlarmEnum;
import com.ssy.jt808.gateway.sdk.terminal.constant.location.addition.AdasAlarmExtraFieldEnum;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 0x64 驾驶辅助功能报警信息
 *
 * @author wangzezhou
 */
@Data
public class AdasAlarmInfo{

  /** 报警 ID */
  private long id;

  /** "报警/事件类型 */
  private AdasAlarmEnum type;

  /** "标志状态：0.不可用 1.开始标志 2.结束标志" */
  private int state;

  /** 报警级别 */
  private int level;

  /** 海拔高度，单位为米（m） */
  private int altitude;

  /** 以度为单位的纬度值乘以 10 的 6 次方，精确到百万分之一度 */
  private float lat;

  /** 以度为单位的经度值乘以 10 的 6 次方，精确到百万分之一度 */
  private float lng;

  /** 报警时间 */
  private LocalDateTime alarmTime;

  /** 车辆状态 */
  private int vehicleStateBits;

  /** 报警标识号 */
  private AlarmIdentificationInfo alarmIdentification;

  /** Adsd 报警的额外信息 */
  private Map<AdasAlarmExtraFieldEnum,Object> extraInfo;

  public static abstract class ExtraInfo{}


  /** 前向碰撞额外信息 */
  @Data
  public static class ForwardCollisionWarningExtraInfo extends ExtraInfo{

    /** 0x01 前车车速(Km/h)范围0~250。不可用时填 0x00 */
    private int frontCarSpeed;

    /** 单位：100ms。前车距离,范围0~100。不可用时填 0x00 */
    private int frontCarDistance;
  }

  /** 0x02 车道偏离报警 */
  @Data
  public static class LaneDeviateExtraInfo extends ExtraInfo{

    /** 0x01 前车车速(Km/h)范围0~250。不可用时填 0x00 */
    private int frontCarSpeed;

    /** 单位：100ms。前车/行人距离,范围0~100。不可用时填 0x00 */
    private int frontObjectDistance;

    /** 偏离类型。 0x01 左侧偏离; 0x02 右侧偏离 */
    private byte deviateType;
  }

  /** 0x04 行人碰撞额外信息 */
  @Data
  public static class PedestrianCollisionExtraInfo extends ExtraInfo{

    /** 单位：100ms。前车距离,范围0~100。不可用时填 0x00 */
    private int frontPedestrianDistance;

  }

  /** 0x06 道路标识超限报警 */
  @Data
  public static class RoadSignOverLimit extends ExtraInfo{

    /** 道路标志识别类型 0x01：限速标志; 0x02：限高标志;  0x03：限重标志 */
    private byte roadSign;
  }

  /** 0x10 道路标志识别事件 */
  @Data
  public static class RoadSignRecognitionEvent extends ExtraInfo{

    /** 道路标志识别类型：0x01 限速标志; 0x02：限高标志;  0x03：限重标志 */
    private byte roadSign;
  }

}
